﻿using System.Web.Mvc;
using System.Web.Security;
using Storytelling.Entidades;
using Storytelling.Modelos;
using Storytelling.Negocio;
using Storytelling.Utils;
using System.Linq;

namespace Storytelling.Controllers
{
    public class CronicaController : BaseCrudController<Cronica, CronicaFormModel>
    {
        protected override IServico<Cronica, CronicaFormModel> Servico
        {
            get { return Servicos.Cronica; }
        }

        protected override void EscolherCarregamento(Carga<Cronica> carga, TipoCarregamento tipo)
        {
            carga.Carregar(ent => ent.Narrador);
            carga.Carregar(ent => ent.Personagens);
        }

        [AutorizarNarrador]
        public override ActionResult Form(long? id)
        {
            if (id.HasValue && Servico.BloquearOperacao(id.Value, User.Identity.Name))
            {
                return RedirectToAction("Index");
            }

            return base.Form(id);
        }

        [AutorizarNarrador]
        public override ActionResult Form(CronicaFormModel model)
        {
            model.Narrador = User.Identity.Name;
            return base.Form(model);
        }

        [AutorizarNarrador]
        public override ActionResult Excluir(long? id)
        {
            if (id.HasValue && Servico.BloquearOperacao(id.Value, User.Identity.Name))
            {
                return RedirectToAction("Index");
            }

            return base.Excluir(id);
        }

        [Authorize]
        public JsonResult CronicasPessoal(string nome)
        {
            FiltrarModel<Cronica> model = new FiltrarModel<Cronica>();
            model.Exemplo.Nome = nome;
            EscolherCarregamento(model.Carga, TipoCarregamento.Autocompletar);
            Servicos.Cronica.CronicasPessoal(model, User.Identity.Name);
            return Json(model.Colecao.Select(ent => new { ent.Id, ent.Nome }));
        }
    }
}
